#pragma once

#include <iostream>
#include <unordered_map>
#include <functional>
#include <ctime>
#include <sys/types.h>
#include <unistd.h>

using task_t = std::function<void()>;

void DownLoad()
{
    std::cout << "我是下载任务..., pid:" << getpid() << std::endl;
}
void Log()
{
    std::cout << "我是日志任务..., pid:" << getpid() << std::endl;
}
void Sql()
{
    std::cout << "我是数据库同步任务..., pid:" << getpid() << std::endl;
}

static int number = 0;
class TaskManger
{
public:
    TaskManger()
    {
        // 种一颗随机数种子
        srand(time(nullptr));

        InsertTask(DownLoad);
        InsertTask(Log);
        InsertTask(Sql);
    }
    void InsertTask(task_t t)
    {
        tasks[number++] = t;
    }
    int SelectTask()
    {
        return rand() % number; //随机选择任务
    }
    void Excute(int number)
    {
        if(tasks.find(number) == tasks.end())   return ;
        tasks[number]();    // 执行指定任务
    }
    ~TaskManger()
    {}
private:
    std::unordered_map<int, task_t> tasks;
};

TaskManger tm;